package com.egao.common.module.student.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.egao.common.core.web.JsonResult;
import com.egao.common.core.web.PageParam;
import com.egao.common.core.web.PageResult;
import com.egao.common.module.student.entity.StudentSignBlank;
import com.egao.common.module.student.entity.vo.StudentSignBlankListVO;
import com.egao.common.module.system.entity.User;

import java.util.List;

/**
 * 学生签约空白协议接口
 *
 * @author lym
 */
public interface StudentSignBlankService extends IService<StudentSignBlank> {

    /**
     * 空白协议分页列表
     * 创建时间倒叙
     *
     * @param page 含登录人、学院等参数
     * @return PageResult<StudentSignBlankListVO>
     */
    PageResult<StudentSignBlankListVO> listPage(PageParam<StudentSignBlankListVO> page);

    /**
     * 空白协议详情
     * ID空 新增表单 默认checkState=999不显示审核内容
     * ID有值 查看表单
     * 无论是新增还是查看表单 都要查询学生列表
     * @param id 主键ID
     * @param loginUserId 操作人
     * @param collegeCode 学院编码
     * @return JsonResult
     */
    JsonResult detail(Integer id, Integer loginUserId, String collegeCode);

    /**
     * 添加一个空白协议
     * 验证学生当前是否有正在进行的毕业去向登记信息、有则不可新增空白协议
     * 修改学生空白协议状态为未完成、不可被邀约、应约、自主录入
     * 同时新增学生操作记录
     *
     * @param studentSignBlank studentSignBlank
     * @param loginUserId 操作人
     * @return JsonResult
     */
    JsonResult add(StudentSignBlank studentSignBlank, Integer loginUserId);

    /**
     * 修改空白协议
     * 同时新增学生操作记录
     *
     * @param studentSignBlank studentSignBlank
     * @param loginUserId      修改人
     * @return JsonResult
     */
    JsonResult edit(StudentSignBlank studentSignBlank, Integer loginUserId);

    /**
     * 学生上传打印表
     * @param studentSignBlank studentSignBlank
     * @param loginUserId 操作人
     * @return JsonResult
     */
    JsonResult upload(StudentSignBlank studentSignBlank, Integer loginUserId);

    /**
     * 验证学生能否新增空白协议
     * @param studentId 学生ID
     * @return code0可以操作 1不能操作
     */
    JsonResult verify(Integer studentId);

    /**
     * 验证学生能否被邀约、应约、自主录入
     * @param studentId 学生ID
     * @return code0可以 1不可以
     */
    JsonResult verifySign(Integer studentId);

    /**
     * 打印表详情
     * @param id 主键ID
     * @param loginUserId 登录人ID 院校null。学生有值，验证打开的表与登录人是否一致
     * @return JsonResult
     */
    JsonResult print(Integer id,  Integer loginUserId);

}
